/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans.data;

import beans.LoginBean;
import beans.MessagesController;
import datamodel.Post;
import datamodel.SystemAdmin;
import datamodel.SystemCustomer;
import datamodel.Ticket;
import ejb.PostManager;
import ejb.TicketManager;
import java.awt.event.ActionEvent;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author eXtreme
 */
@ManagedBean(name = "ticket")
@SessionScoped
public class TicketBean implements Serializable {

    private Ticket ticket;
    private int mode = 1;
    @EJB
    private TicketManager tm;
    @EJB
    private PostManager pm;
    @ManagedProperty(value = "#{login}")
    private LoginBean login;

    public List<Ticket> getTickets() {
        if (login.isLoggedSystemCustomer()) {
            // show customer tickets
            return tm.getCustomerTickets((SystemCustomer) login.getLoggedUser());
        } else if (mode == 0) {
            // show tickets available to this admin (but not currently solved by him)
            return tm.getAdminAvailableTickets((SystemAdmin) login.getLoggedUser());
        } else if (mode == 1) {
            // show tickets which are beeing solved by this admin
            return tm.getAdminSolvingTickets((SystemAdmin) login.getLoggedUser());
        } else {
            return tm.getAllTickets();
        }
    }

    public String setDisplayMode(int mode) {
        this.mode = mode;
        return "ticketList?faces-redirect=true";
    }

    public void setMode(int mode) {
        this.mode = mode;
    }

    public LoginBean getLogin() {
        return login;
    }

    public void setLogin(LoginBean login) {
        this.login = login;
    }

    public String editTicket(Ticket t) {
        this.ticket = t;
        return "ticketDetail?faces-redirect=true";
    }

    /**
     * @return the ticket
     */
    public Ticket getTicket() {
        return ticket;
    }

    /**
     * @param ticket the ticket to set
     */
    public void setTicket(Ticket ticket) {
        this.ticket = ticket;
    }

    public void saveTicket(Ticket t) {
        tm.update(t);
        MessagesController.addInfo("Změny v ticketu byly uloženy.");
    }

    public List<Post> getPosts() {
        return new ArrayList<Post>(pm.getAllPostsOf(ticket));
    }

    public void takeTicket(Ticket t) {
        t.setSolvedBy((SystemAdmin) login.getLoggedUser());
        tm.update(t);
        MessagesController.addInfo("Byl jste úspěšně nastaven jako řešitel tohoto ticketu.");
    }

    public void dismissTicket(Ticket t) {  
        t.setSolvedBy(null);
        tm.update(t);
        MessagesController.addInfo("Řešitel ticketu byl odebrán.");
    }

    public boolean hasSolver() {
        return (ticket.getSolvedBy() != null);
    }

    public boolean waitingAgree() {
        MessagesController.addWarn("Pro další pokračování je třeba potvrdit cenu (" + ticket.getPrice() + ").");
        return (ticket.getTicket_state() == 2);
    }

    public void agree(Ticket t) {       
        t.setTicket_state(3);
        tm.update(t);
        MessagesController.addInfo("Souhlasil(a) jste s cenou za vyřízení (" + t.getPrice() + ").");
    }

    public void decline(Ticket t) {
        t.setTicket_state(6);
        tm.update(t);
        MessagesController.addWarn("Odmítla(a) jste s cenou za vyřízení (" + t.getPrice() + ").");
    }

    public String stringState(Ticket t) {

        switch (t.getTicket_state()) {
            case 0:
                return "Čeká";
            case 1:
                return "V řešení";
            case 2:
                return "V řešení - Čeká na potvrzení ceny";
            case 3:
                return "V řešení - Cena potvrzena";
            case 4:
                return "Vyřešen";
            case 5:
                return "Zrušen";
            case 6:
                return "Cena odmítnuta";
            default:
                return "Neznámý stav";

        }
    }
}
